// 批量更新服务页面加载组件的脚本
const fs = require('fs');
const path = require('path');

// 需要更新的服务页面列表
const servicePages = [
  'service/civil-affairs/pension-subsidy',
  'service/agriculture-rural/machinery-subsidy',
  'service/comprehensive-governance/dispute-mediation',
  'service/comprehensive-governance/security-incident-report',
  'service/certificate-services/resident-proof',
  'service/public-services/streetlight-repair'
];

// 更新JSON配置文件
function updateJsonConfig(pagePath) {
  const jsonPath = path.join(__dirname, '..', 'pages', pagePath, 'index.json');
  
  try {
    const jsonContent = JSON.parse(fs.readFileSync(jsonPath, 'utf8'));
    
    // 添加自定义加载组件
    jsonContent.usingComponents = {
      "loading": "/components/loading/loading",
      "global-loading": "/components/global-loading/global-loading"
    };
    
    fs.writeFileSync(jsonPath, JSON.stringify(jsonContent, null, 2));
    console.log(`✅ 已更新 ${pagePath}/index.json`);
  } catch (error) {
    console.error(`❌ 更新 ${pagePath}/index.json 失败:`, error.message);
  }
}

// 更新WXML模板文件
function updateWxmlTemplate(pagePath) {
  const wxmlPath = path.join(__dirname, '..', 'pages', pagePath, 'index.wxml');
  
  try {
    let wxmlContent = fs.readFileSync(wxmlPath, 'utf8');
    
    // 检查是否已经包含加载组件
    if (wxmlContent.includes('<global-loading')) {
      console.log(`⚠️  ${pagePath}/index.wxml 已包含加载组件，跳过`);
      return;
    }
    
    // 在页面开头添加加载组件
    const loadingComponents = `  <!-- 全局加载组件 -->
  <global-loading 
    global-loading="{{globalLoading}}" 
    global-skeleton-type="{{globalSkeletonType}}" 
    global-loading-text="{{globalLoadingText}}">
  </global-loading>
  
  <!-- 自定义加载组件 -->
  <loading 
    wx:if="{{loading}}"
    skeleton-type="form" 
    loading-text="正在加载申请表单..."
    bind:ready="onLoadingReady">
  </loading>

  <view wx:else>
`;
    
    // 替换页面根元素
    wxmlContent = wxmlContent.replace(
      /<view class="page">/,
      `<view class="page">\n${loadingComponents}`
    );
    
    // 在页面结尾添加闭合标签
    wxmlContent = wxmlContent.replace(
      /<\/view>\s*$/,
      '  </view>\n</view>'
    );
    
    fs.writeFileSync(wxmlPath, wxmlContent);
    console.log(`✅ 已更新 ${pagePath}/index.wxml`);
  } catch (error) {
    console.error(`❌ 更新 ${pagePath}/index.wxml 失败:`, error.message);
  }
}

// 更新JS逻辑文件
function updateJsLogic(pagePath) {
  const jsPath = path.join(__dirname, '..', 'pages', pagePath, 'index.js');
  
  try {
    let jsContent = fs.readFileSync(jsPath, 'utf8');
    
    // 检查是否已经包含加载管理器
    if (jsContent.includes('loadingManager')) {
      console.log(`⚠️  ${pagePath}/index.js 已包含加载管理器，跳过`);
      return;
    }
    
    // 添加加载管理器引入
    const loadingImports = `// 引入加载管理器
const loadingManager = require('../../../../utils/loadingManager');
const pageLoadingManager = require('../../../../utils/pageLoadingManager');
`;
    
    // 在文件开头添加引入
    jsContent = jsContent.replace(
      /(const.*require.*;)/,
      `$1\n${loadingImports}`
    );
    
    // 添加加载状态数据
    const loadingData = `    // 全局加载状态
    globalLoading: false,
    globalSkeletonType: 'form',
    globalLoadingText: '申请表单加载中...',
    
    // 页面加载状态
    loading: false,
    
`;
    
    // 在data对象中添加加载状态
    jsContent = jsContent.replace(
      /(data:\s*{)/,
      `$1\n${loadingData}`
    );
    
    // 添加加载相关方法
    const loadingMethods = `  // 加载组件准备就绪
  onLoadingReady(e) {
    const loadingInstance = e.detail
    loadingManager.registerLoading('${pagePath.replace(/\//g, '-')}', loadingInstance)
  },

  onReady() {
    // 页面准备完成，隐藏加载效果
    pageLoadingManager.onPageDataLoaded('pages/${pagePath}/index');
  },

  // 更新全局加载状态
  updateGlobalLoading(data) {
    this.setData({
      globalLoading: data.globalLoading,
      globalSkeletonType: data.globalSkeletonType || 'form',
      globalLoadingText: data.globalLoadingText || '申请表单加载中...'
    });
  },

`;
    
    // 在onLoad方法前添加加载方法
    jsContent = jsContent.replace(
      /(onLoad\([^)]*\)\s*{)/,
      `${loadingMethods}$1`
    );
    
    // 在onLoad方法中添加页面加载效果
    jsContent = jsContent.replace(
      /(onLoad\([^)]*\)\s*{\s*)/,
      `$1    // 显示页面加载效果
    pageLoadingManager.onPageEnter('pages/${pagePath}/index', {
      skeletonType: 'form',
      loadingText: '申请表单加载中...',
      loadingTime: 800
    });
    
`
    );
    
    fs.writeFileSync(jsPath, jsContent);
    console.log(`✅ 已更新 ${pagePath}/index.js`);
  } catch (error) {
    console.error(`❌ 更新 ${pagePath}/index.js 失败:`, error.message);
  }
}

// 主执行函数
function main() {
  console.log('🚀 开始批量更新服务页面加载组件...\n');
  
  servicePages.forEach(pagePath => {
    console.log(`📝 处理页面: ${pagePath}`);
    
    updateJsonConfig(pagePath);
    updateWxmlTemplate(pagePath);
    updateJsLogic(pagePath);
    
    console.log(`✅ 完成 ${pagePath}\n`);
  });
  
  console.log('🎉 批量更新完成！');
}

// 执行脚本
if (require.main === module) {
  main();
}

module.exports = {
  updateJsonConfig,
  updateWxmlTemplate,
  updateJsLogic,
  main
};
